#ifndef MAINVIEW_H
#define MAINVIEW_H

#include <QMainWindow>
#include <QSerialPort>			//访问串口的库
#include <QSerialPortInfo>		//查询串口信息的库
#include <QDebug>				//用于调试打印输出的库
#include <QTimer>				//定时器的库
#include <QMessageBox>			//一个小的弹窗库
#include <QChart>               //图表库
#include <QtCharts/QChartView>
#include <QtCharts/QSplineSeries>
#include <QValueAxis>
#include <graphicsview.h>
#include <serialportworker.h>
#include <QMutex>
#include "chartwork.h" // 图表类
QT_BEGIN_NAMESPACE
namespace Ui { class MainView; }
using namespace QtCharts;
QT_END_NAMESPACE

class MainView : public QMainWindow
{
    Q_OBJECT

public:
    MainView(QWidget *parent = nullptr);

    // 图表线程类
    void initChartWorker();
    QThread *chartThread;
    ChartWorker *chartWorker;

    ~MainView();
    int serial_flag =0;
    int btn_on_off = 0;
    int btn_state = 0;
    int choose_index = 0;
    int clr_state = 0;
    int AXIS_MAX_X = 10;
    int AXIS_MAX_Y = 500;
    int AXIS_MIN_Y = -500;
    int start_flag = 0; // 串口启动标志位
    const int maxLines = 100; //串口保留的最大行数
    QByteArray buffer;
    // 在类成员变量中添加一个 QList<int> 用于存储最新的10个Y值
    QList<short> y_list;
    QList<short> y_list1;

signals:
    void btn_static(bool enable);

    void time_sign();

    void dataReceived(const QString &data);

private slots:

    void on_btn_serial_clicked();



    // 定时器函数
    void timer_1000ms();

    void on_btn_hex_clicked();

    void on_btn_clr_clicked();

    void serialPortReadyRead();


private:
    QList<QGraphicsEllipseItem*> circles;
    // 定时器
    QTimer *ftimer;
    // 串口对象
    QSerialPort *serialport;

    //初始化线程
    void initSerialWorker();
    QThread* workerThread;
    SerialWorker* worker;
    // 图表一
    QChart *chart1;
    QChart *m_chart1;
    QValueAxis *m_axisX1;  //x轴
    QValueAxis *m_axisY1;  // y轴
    QLineSeries *m_lineSeries1;
    QList<short> y_list0;
    // 如果有更多 case，可以继续添加


    // 图表二
    QChart *chart;
    QChart *m_chart;
    QValueAxis *m_axisX;  //x轴
    QValueAxis *m_axisY;  // y轴
    QLineSeries *m_lineSeries;
    //图表创建函数
    void setupChart(QChartView *chartView, QChart *&chart, QLineSeries *&lineSeries, QValueAxis *&axisX, QValueAxis *&axisY, const QString &sensorName);
    //图表更新
    void updateLineSeriesData();
    // 图表更新数据
    void updateChartData();
    // 扫描串口
    void scanSerialPort();
    // 初始化
    void serialPortInit();
    // 波特率设置
    void baud_rate();
    // 定时器刷新串口
    void reflash_com();
    // 刷新x轴
    void serialTimeout();
    // 接收到数据
    void onDataReceived(const QString &data);
    // 曲线数据点存储
    QList<QPointF> points;
    // 动态x轴
    qreal currentTime = 0;


    Ui::MainView *ui;
};
#endif // MAINVIEW_H
